package com.bjpowernode.crm.web.filter;

import com.bjpowernode.crm.settings.domain.User;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @program: crm
 * @description:
 * @author: 玉树临风的寒
 * @create: 2020-12-15 21:03:12
 **/
public class LoginFilter implements Filter {
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入到验证有没有登录过的过滤器");

        HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
        HttpServletResponse httpServletResponse=(HttpServletResponse)servletResponse;
        String path =httpServletRequest.getServletPath();
        //验证相关运行访问
        if ("/login.jsp".equals(path) || "/settings/user/login.do".equals(path)) {
            filterChain.doFilter(httpServletRequest,httpServletResponse);
        }else {
            HttpSession session = httpServletRequest.getSession();
            User user =(User)session.getAttribute("user");
            if(user!=null){
                filterChain.doFilter(httpServletRequest,httpServletResponse);
            } else {//没有登录过

                //重定向到登录页
            /*
             重定向的路径怎么写？
             在实际项目开发中，对于路径的使用，不论操作的是前端还是后端，应该一律使用绝对路径
             关于转发和重定向的路径的写法如下
             转发：
                使用的是一种特殊的绝对路径的使用方式，这种绝对路径前面没有/项目名，
                 这种路径也称为内部路径
                 /login.jsp
              重定向:
                使用的是传统绝对路径的写法，前面必须以/项目名开头，后面跟具体的资源路径
                /crm/login.jsp

                为什么要使用重定向？
                因为使用请求转发，路径会停留在老路径上不会发生改变
                我们应该在用户跳转到登录页面的同时，将浏览器的地址栏自动设置为当前最新的登录页

                httpServletRequest.getContextPath() 动态的拿到 /项目名
             */

                httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/login.jsp");
            }
        }
        //如果user不为null说明登录过

    }
}
